"""
Coloracao de mapas.
"""

from time import time
import solver
import math

def conflito(v):
    linhas = set()
    colunas = set()
    diagonais1 = set() # Diagonais assim \
    diagonais2 = set() # Diagonais assim /
    for linha, coluna in v.items():
        if coluna is None:
            continue
        if linha in linhas:
            return True
        else:
            linhas.add(linha)
        if coluna in colunas:
            return True
        else:
            colunas.add(coluna)
        diag1 = linha - coluna
        diag2 = linha + coluna
        if diag1 in diagonais1:
            return True
        else:
            diagonais1.add(diag1)
        if diag2 in diagonais2:
            return True
        else:
            diagonais2.add(diag2)
    return False

def eh_solucao_otimizada(v):
    return not conflito(v)

def eh_solucao(v):
    for value in v.values():
        if value is None:
            return True
    return not conflito(v)

def espelhamento(v): # Regra de espelhamento
    if v[0] is not None:
        if v[0] >= len(v.keys())/2:
            return False
    return True

linhas = range(8)

def main():
    v = solver.Solution(linhas)
    d_v = range(len(linhas))
    #rules = [ eh_solucao ]
    rules = [ eh_solucao_otimizada, espelhamento ]

    #solver.solve('com FW', v, d_v, rules, True)
    solver.solve('sem FW', v, d_v, rules, False)

if __name__ == '__main__':
    main()
